$(function () {
    loadCateList()
    // 1.加载 文章分类 下拉框---------------------------------
    function loadCateList() {
        $.ajax({
            method: 'GEt',
            url: '/my/article/cates',
            success(res) {
                let strHtml = template('tpl-cate', res.data)
                $('select[name=cate_id]').html(strHtml)
                layui.form.render()//渲染layui下拉框
            }
        })
    }

    // 初始化富文本编辑器-------------------------------------
    initEditor()

    // 2. 初始化图片裁剪器------------------------------------
    let $image = $('#image')

    // 3. 裁剪选项-------------------------------------------
    let options = {
        aspectRatio: 400 / 280,
        preview: '.img-preview'
    }

    // 4. 初始化裁剪区域--------------------------------------
    $image.cropper(options)

    // 5.为选择封面的按钮，绑定点击事件处理函数-----------------
    $('#btnChooseImage').on('click', function () {
        $('#coverFile').trigger('click')
    })

    // 6.文件选择框 change事件---------------------------------
    // 触发时机：当 选中的文件 发生改变时 触发 
    $('#coverFile').on('change', function (e) {
        // 6.1如果么有选中图片，则提示错误消息
        if (e.target.files.length === 0)
            return layui.layer.msg('您还未选中要修改的图片哦~~')
        // 6.2 如果有选中的文件，则获取 被选中的 文件信息 伪数组 第一个文件
        let choFile = e.target.files[0]

        // 6.3 将 文件信息 转成 文件的 虚拟路径
        //     blob:http://127.0.0.1:5500/6ef5fed5-01e6-4b65-8519-74b00eafabe1
        let filePathVirtual = URL.createObjectURL(choFile)
        // 6.4 将 虚拟路径 设置给 剪裁组件
        $image
            .cropper('destroy')      // 销毁旧的裁剪区域
            .attr('src', filePathVirtual)  // 重新设置图片路径
            .cropper(options)        // 重新初始化裁剪区域
    })

    // 7.发布和保存草稿按钮----------------------------------
    let art_state = '已发布'// 定义文章的发布状态
    // 为存为草稿按钮，绑定点击事件处理函数
    $('#btnSave2').on('click', function () {
        art_state = '草稿'
    })

    // 8.为表单绑定submit提交事件----------------------------
    $('#form-pub').on('submit', function (e) {
        // 8.1 阻止表单的默认提交行为
        e.preventDefault()
        // 8.2 基于 form 表单，快速创建一个 FormData 对象
        var fd = new FormData(this)//传入表单dom对象
        // 8.3 将文章的发布状态追加到 fd 中
        fd.append('state', art_state)
        // 8.4 将封面裁剪过后的图片，输出为一个文件对象
        $image
            .cropper('getCroppedCanvas', {
                // 创建一个 Canvas 画布
                width: 400,
                height: 280
            })
            .toBlob(function (blob) {//blob时裁剪后的图片二进制数据
                // 追加 裁剪后的图片数据到fd
                fd.append('cover_img', blob)
                // 调用方法 异步提交 文章数据
                // 注意：只有在这个回调函数中 才能拿到图片裁剪数据
                // 所以 必须在 拿完 图片裁剪数据后 再发送异步请求
                pubArticle(fd)
            })
    })

    // 9.发布新增--------------------------------------------
    function pubArticle(fdArt) {
        $.ajax({
            method: 'POST',
            url: '/my/article/add',
            data: fdArt,
            // 注意：如果向服务器提交的是 FormData 格式的数据，
            // 必须添加以下两个配置项
            contentType: false,
            processData: false,
            success: function (res) {
                layui.layer.msg(res.message)

                if (res.status !== 0) {
                    return
                }
                // 发布文章成功后，跳转到文章列表页面
                location.href = '/article/art_list.html';
                $(window.parent.document.querySelector('#TBTZ')).trigger('click')
            }
        })
    }
})